package models

type CiEnv struct {
	Model
	CId            int    `gorm:"column:c_id" db:"column:c_id" json:"c_id" form:"c_id"`                                             // 构建计划ID
	Name           string `gorm:"column:name" db:"column:name" json:"name" form:"name"`                                             // 变量名称
	Kind           int    `gorm:"column:kind" db:"column:kind" json:"kind" form:"kind"`                                             // 类别
	Default        string `gorm:"column:default" db:"column:default" json:"default" form:"default"`                                 // 默认值
	AlternateValue string `gorm:"column:alternate_value" db:"column:alternate_value" json:"alternate_value" form:"alternate_value"` // 可选项
	IsSecret       int    `gorm:"column:is_secret" db:"column:is_secret" json:"is_secret" form:"is_secret"`                         // 保密
	Describe       string `gorm:"column:describe" db:"column:describe" json:"describe" form:"describe"`                             // 说明
}

func GetCiEnvs(cid int) []*CiEnv {
	envs := make([]*CiEnv, 0)
	db.Where("c_id = ?", cid).Where("deleted_at = 0").Find(&envs)
	return envs
}

func GetCiEnvByID(id int) *CiEnv {
	env := CiEnv{}
	db.Where("id = ?", id).Where("deleted_at = 0").First(&env)
	return &env
}

func GetCiEnv(env CiEnv) CiEnv {
	envResult := CiEnv{}
	db.Where(&env).First(&envResult)
	return envResult
}

func GetEnvByCIDName(cid int, name string) *CiEnv {
	env := CiEnv{}
	db.Where("c_id = ?", cid).Where("name = ?", name).Where("deleted_at = 0").First(&env)
	if env.ID == 0 {
		return nil
	}
	return &env
}

func CreateCiEnv(env *CiEnv) error {
	return db.Create(env).Error
}

func CreateCiEnvs(envs []CiEnv) error {
	return db.Create(&envs).Error
}

func UpdateCiEnv(envID int, env CiEnv) error {
	return db.Model(&CiEnv{}).Where("id = ?", envID).Updates(&env).Error
}

func DeleteCiEnv(id int) error {
	return db.Where("id = ?", id).Delete(&CiEnv{}).Error
}

func DeleteCiEnvByCid(cid int) error {
	return db.Where("c_id = ?", cid).Delete(&CiEnv{}).Error
}

type CiDiscarder struct {
	Model
	CId int `gorm:"column:c_id" db:"column:c_id" json:"c_id" form:"c_id"`
	Max int `gorm:"column:max" db:"column:max" json:"max" form:"max"`
	Day int `gorm:"column:day" db:"column:day" json:"day" form:"day"`
}

func GetCiDiscarder(cid int) CiDiscarder {
	dis := CiDiscarder{
		Day: -1,
		Max: -1,
	}
	db.Where("c_id = ?", cid).First(&dis)
	return dis
}

func UpdateCiDiscarder(cid int, discarder CiDiscarder) error {
	return db.Where("c_id = ?", cid).Updates(&discarder).Error
}

func CreateDiscarder(discarder CiDiscarder) error {
	return db.Create(&discarder).Error
}

func DeleteDiscarder(cid int) error {
	return db.Where("c_id = ?", cid).Delete(&CiDiscarder{}).Error
}

type CiTiming struct {
	Model
	CID    int    `gorm:"column:c_id" db:"column:c_id" json:"c_id" form:"c_id"`
	Week   string `gorm:"column:week" db:"column:week" json:"week" form:"week"`         // 设定的星期
	Hour   int    `gorm:"column:hour" db:"column:hour" json:"hour" form:"hour"`         // 设定的小时
	Minute int    `gorm:"column:minute" db:"column:minute" json:"minute" form:"minute"` // 设定的分钟
}

type GetCiTimingResp struct {
	Model
	CID    int   `json:"c_id" form:"c_id"`
	Week   []int `json:"week" form:"week"`     // 设定的星期
	Hour   int   `json:"hour" form:"hour"`     // 设定的小时
	Minute int   `json:"minute" form:"minute"` // 设定的分钟
}

func GetCiTiming(cid int) *CiTiming {
	timing := CiTiming{}
	db.Where("c_id = ?", cid).First(&timing)
	if timing.CID == 0 {
		return nil
	}
	return &timing
}

func UpdateCiTiming(cid int, timing CiTiming) error {
	return db.Where("c_id = ?", cid).Updates(&timing).Error
}

func CreateCiTiming(timing CiTiming) error {
	return db.Create(&timing).Error
}
